home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / enigma / earcd / comm / comm2 / emins20r.lha / E!Mines20r.rexx < prev    next >
OS/2 REXX Batch file  |  1996-12-22  |  18KB  |  678 lines

  1. /*
  2. ** $VER: E!Mines.rexx v2.0 (registered) (22.12.96) (c) Inorix scripts
  3. **
  4. ** Last changes:
  5. ** -------------
  6. ** - Added dates to highscores. This makes highscorefiles incompatible!
  7. ** - Visual feedback on 'change fieldsize'
  8. ** - Added quite good random generator, based on 'Very Random v1.1' by
  9. **   Shane D. Killian.
  10. */
  11.  
  12. OPTIONS RESULTS
  13.  
  14. IF ~SHOW('L','rexxsupport.library') THEN DO
  15.   IF ~ADDLIB('rexxsupport.library',0,-30) THEN DO
  16.     transmit '\c1Error! Missing library!'
  17.     sysoplog '\c7Missing rexxsupport.library!'
  18.     EXIT
  19.   END
  20. END
  21.  
  22. CALL Init
  23. CALL ReadHiScores
  24. CALL Showmain
  25. CALL Main
  26. CALL Eind
  27.  
  28. Eind:
  29.   CLS
  30.   SEND APos(20,4)||Esc'[36;44mÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»'Apos(20,5)'º    Thank you for playing    º'APos(20,6)'º'Esc'[37m  'CENTER(version,26)' 'Esc'[36mº'APos(20,7)'ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ'
  31.   TR '\w1'
  32.   SETLENGTH ULines
  33. EXIT
  34.  
  35. WaitKey: PROCEDURE
  36.   GETCHAR
  37.   dummy=UPPER(RESULT)
  38.   IF dummy='###PANIC' THEN EXIT
  39. RETURN(dummy)
  40.  
  41. Init:
  42.   plaats=1
  43.   oldplaats=1
  44.  
  45.   version='E!Mines v2.0 (registered)'
  46.  
  47.   xmid=31
  48.   ymid=16
  49.  
  50.   xsize=10
  51.   ysize=10
  52.  
  53.   DataPath='RAM:'
  54.   IF EXISTS('ENV:InorixDataPath') THEN DO
  55.     CALL OPEN(dump,'ENV:InorixDataPath',R)
  56.     DataPath=READLN(dump)
  57.     IF RIGHT(DataPath,1)~=':' & RIGHT(DataPath,1)~='/' THEN DataPath=DataPath'/'
  58.     CALL CLOSE(dump)
  59.   END
  60.   IF ~EXISTS(Datapath'EMines') THEN MAKEDIR(Datapath'EMines')
  61.   Datapath=Datapath'EMines/'
  62.   IF EXISTS(Datapath'E!Mines.field') THEN DO
  63.     CALL OPEN(dump,DataPath'E!Mines.field',R)
  64.     dummy=READLN(dump)
  65.     IF UPPER(dummy)='E!MINES SIZE FILE' THEN DO
  66.       xsize=READLN(dump)
  67.       IF xsize<6 THEN xsize=6
  68.       IF xsize>15 THEN xsize=15
  69.       ysize=READLN(dump)
  70.       IF ysize<4 THEN ysize=4
  71.       IF ysize>14 THEN ysize=14
  72.     END
  73.     CALL CLOSE(dump)
  74.   END
  75.  
  76.   xbit=xmid-(TRUNC(xsize/2,0)*4)
  77.   ybit=ymid-(TRUNC(ysize/2,0)*2)
  78.  
  79.   Level.1.0='Easy'
  80.   Level.1.1=11
  81.   Level.2.0='Medium'
  82.   Level.2.1=18
  83.   Level.3.0='Hard'
  84.   Level.3.1=25
  85.  
  86.   diff=2
  87.   percent=Level.diff.1
  88.   nummines=TRUNC((((xsize*ysize)*percent)/100),0)
  89.  
  90.   TR=TRANSMIT
  91.   GETUSER 1
  92.   UAlias=RESULT
  93.   UAlias=SPACE(UAlias,1,'_')
  94.   GETUSER 15
  95.   ULevel=RESULT
  96.  
  97.   upje=0
  98.   EditLevel=32
  99.   IF ULEVEL>=EditLevel THEN upje=1
  100.  
  101.   BBSIDENTIFY TERM
  102.   ULines=WORD(RESULT,2)
  103.   IF ULines<32 THEN SETLENGTH 32
  104.  
  105.   top=2+ybit
  106.   bot=(ysize*2)+ybit
  107.   left=3+xbit
  108.   right=((xsize*4)-1)+xbit
  109.  
  110.   FLASH='07'x
  111.  
  112.   ESC='1b'x
  113.   Col.0=ESC'[30m'
  114.   Col.1=ESC'[31m'
  115.   Col.2=ESC'[32m'
  116.   Col.3=ESC'[33m'
  117.   Col.4=ESC'[34m'
  118.   Col.5=ESC'[35m'
  119.   Col.6=ESC'[36m'
  120.   Col.7=ESC'[37m'
  121.  
  122.   Bcol.0=ESC'[40m'
  123.   BCol.1=ESC'[41m'
  124.   BCol.2=ESC'[42m'
  125.   BCol.3=ESC'[43m'
  126.   BCol.4=ESC'[44m'
  127.   BCol.5=ESC'[45m'
  128.   BCol.6=ESC'[46m'
  129.   BCol.7=ESC'[47m'
  130.  
  131.   def=ESC'[0m'
  132.  
  133.   cur.1.0=BCol.0||col.3' Start E!Mines         '
  134.   cur.1.1=BCol.4||col.3' Start E!Mines         'def
  135.   cur.1=Apos(29,12)
  136.   cur.2.0=BCol.0||col.3' Instructions          '
  137.   cur.2.1=BCol.4||col.3' Instructions          'def
  138.   cur.2=Apos(29,13)
  139.   cur.3.0=BCol.0||col.3' High scores           '
  140.   cur.3.1=BCol.4||col.3' High scores           'def
  141.   cur.3=Apos(29,14)
  142.   cur.4.0=BCol.0||col.3' Change level: 'col.7||LEFT(level.diff.0,6)'  '
  143.   cur.4.1=BCol.4||col.3' Change level: 'col.7||LEFT(level.diff.0,6)'  'def
  144.   cur.4=Apos(29,15)
  145.   cur.5.0=BCol.0||col.3' Set fieldsize 'col.7'('RIGHT(xsize,2)'*'RIGHT(ysize,2)') '
  146.   cur.5.1=BCol.4||col.3' Set fieldsize 'col.7'('RIGHT(xsize,2)'*'RIGHT(ysize,2)') 'def
  147.   cur.5=Apos(29,16)
  148.   cur.6.0=BCol.0||col.3' Quit                  '
  149.   cur.6.1=BCol.4||col.3' Quit                  'def
  150.   cur.6=Apos(29,16+upje)
  151. RETURN
  152.  
  153. Main:
  154.   DO FOREVER
  155.     BUFFERFLUSH
  156.     Choice=Maincursor()
  157.     SELECT
  158.       WHEN Choice='1' THEN DO
  159.         CALL SetUp
  160.         CALL Showfield
  161.         CALL GameLoop
  162.         CALL Showmain
  163.       END
  164.       WHEN Choice='2' THEN DO
  165.         CALL Instructions
  166.         CALL ShowMain
  167.       END
  168.       WHEN Choice='3' THEN DO
  169.         CALL ReadHiScores
  170.         CLS
  171.         TR '\n4\c3                    ÕÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍ͸'
  172.         TR '                    ³ \c1The 10 fastest minesweepers\c3 ³ \c7'LEFT(Level.diff.0,6)' \c3³'
  173.         TR '              ÕÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÏÍÍÍÍ͸'
  174.         DO a=1 TO 10
  175.           TR '\c3              ³'RIGHT(a,2)' \c2'list.a'\c3³'
  176.         END
  177.         TR '              ÀÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÙ'
  178.         TR '                          ³ \c2Hit any key to continue!\c3³'
  179.         TR '                          ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ'
  180.         CALL WaitKey()
  181.         CALL ShowMain
  182.       END
  183.       WHEN Choice='4' THEN DO
  184.         diff=diff+1
  185.         IF diff=4 THEN diff=1
  186.         percent=Level.diff.1
  187.         nummines=TRUNC((((xsize*ysize)*percent)/100),0)
  188.         CALL ReadHiScores
  189.         cur.4.0=BCol.0||col.3' Change level: 'col.7||LEFT(level.diff.0,6)'  '
  190.         cur.4.1=BCol.4||col.3' Change level: 'col.7||LEFT(level.diff.0,6)'  'def
  191.         CALL ShowMain
  192.       END
  193.       WHEN Choice='5' & ULevel>=EditLevel THEN DO
  194.         CALL SetSize
  195.         CALL ReadHiScores
  196.         cur.5.0=BCol.0||col.3' Set fieldsize 'col.7'('RIGHT(xsize,2)'*'RIGHT(ysize,2)') '
  197.         cur.5.1=BCol.4||col.3' Set fieldsize 'col.7'('RIGHT(xsize,2)'*'RIGHT(ysize,2)') 'def
  198.         CALL Showmain
  199.       END
  200.       WHEN Choice='6' THEN DO
  201.         LEAVE
  202.       END
  203.       OTHERWISE NOP
  204.     END
  205.   END
  206. RETURN
  207.  
  208. QRnd: PROCEDURE
  209.   ARG lo,hi
  210.   n1=TIME(S)
  211.   d=hi-lo+1
  212.   x=LENGTH(d)
  213.   n1=RIGHT(n1,x)
  214.   p=d
  215.   IF p>999 THEN p=999
  216.   r=n1+RANDOM(0,p)
  217.   r=r//d+lo
  218. RETURN(r)
  219.  
  220. SetUp:
  221.   SEND Apos(27,18+upje)||col.2'   Creating minefield...    '
  222.   DO a=1 TO ysize+1
  223.     DO b=1 TO xsize+1
  224.       field.b.a.0='?'
  225.       field.b.a.1='-'
  226.     END
  227.   END
  228.  
  229.   DO a=1 TO nummines
  230.     hit=0
  231.     DO UNTIL hit=1
  232.       x=QRnd(1,xsize)
  233.       y=QRnd(1,ysize)
  234.       IF field.x.y.1~='*' THEN DO
  235.         hit=1
  236.         field.x.y.1='*'
  237.       END
  238.     END
  239.   END
  240.  
  241.   DO y=1 TO ysize
  242.     DO x=1 to xsize
  243.       x1=x-1
  244.       x2=x
  245.       x3=x+1
  246.       y1=y-1
  247.       y2=y
  248.       y3=y+1
  249.  
  250.       count=0
  251.       IF field.x1.y1.1='*' THEN count=count+1
  252.       IF field.x2.y1.1='*' THEN count=count+1
  253.       IF field.x3.y1.1='*' THEN count=count+1
  254.  
  255.       IF field.x1.y2.1='*' THEN count=count+1
  256.       IF field.x3.y2.1='*' THEN count=count+1
  257.  
  258.       IF field.x1.y3.1='*' THEN count=count+1
  259.       IF field.x2.y3.1='*' THEN count=count+1
  260.       IF field.x3.y3.1='*' THEN count=count+1
  261.  
  262.       IF field.x2.y2.1='*' THEN count='*'
  263.       IF count=0 THEN count=' '
  264.  
  265.       field.x.y.1=count
  266.     END
  267.   END
  268. RETURN
  269.  
  270. Showfield:
  271.   CLS
  272.   SEND APos(xbit,ybit)||col.2' É'COPIES('ÍÍÍË',xsize)||ESC'[D»'
  273.   q=1
  274.   DO a=1 TO ysize
  275.     SEND APos(xbit,ybit+q)
  276.     DO b=1 TO xsize
  277.       SEND col.2' º 'col.7'?'
  278.     END
  279.     q=q+1
  280.     SEND col.2' º'
  281.     SEND APos(xbit,ybit+q)||col.2' Ì'COPIES('ÍÍÍÎ',xsize)||ESC'[D¹'
  282.     q=q+1
  283.   END
  284.   SEND APos(xbit,ybit+q-1)||col.2' È'COPIES('ÍÍÍÊ',xsize)||ESC'[D¼'
  285. RETURN
  286.  
  287. GameLoop:
  288.   BUFFERFLUSH
  289.   BeginTime=TIME(S)
  290.   GameTime=0
  291.   quit=0
  292.   lose=0
  293.   win=0
  294.   xpos=2+xbit
  295.   ypos=1+ybit
  296.   flagsset=0
  297.   flagsleft=nummines
  298.  
  299.   SEND col.1||APos(xpos,ypos)'('Apos(xpos+2,ypos)')'APos(0,0)
  300.   SEND APos(65,2)||col.7'Flags left: 'col.2||RIGHT(flagsleft,2)||APos(65,3)||col.7' Flags set: 'col.2||RIGHT(flagsset,2)||APos(0,0)
  301.  
  302.   DO WHILE quit=0
  303.     key=Waitkey()
  304.     IF key='1B'x THEN DO
  305.       GETCHAR
  306.       key=Waitkey()
  307.       IF key='A' THEN key='8'
  308.       IF key='B' THEN key='2'
  309.       IF key='C' THEN key='6'
  310.       IF key='D' THEN key='4'
  311.     END
  312.     oldx=xpos
  313.     oldy=ypos
  314.     niets=0
  315.     show=0
  316.     SELECT
  317.       WHEN UPPER(key)='Q' THEN quit=1
  318.       WHEN key='2' & ypos<bot-1 THEN ypos=ypos+2
  319.       WHEN key='4' & xpos>left THEN xpos=xpos-4
  320.       WHEN key='6' & xpos<right-1 THEN xpos=xpos+4
  321.       WHEN key='8' & ypos>top THEN ypos=ypos-2
  322.       WHEN key=' ' | key='0d'x THEN show=1
  323.       WHEN key='0' | key='.' | UPPER(key)='Z' THEN show=2
  324.       OTHERWISE niets=1
  325.     END
  326.     IF niets=0 & quit=0 THEN DO
  327.       SEND APos(oldx,oldy)||col.1' 'APos(oldx+2,oldy)' 'APos(xpos,ypos)'('Apos(xpos+2,ypos)')'APos(0,0)
  328.     END
  329.     IF show=1 & quit=0 THEN DO
  330.       x=((xpos+2)-xbit)/4
  331.       y=((ypos+1)-ybit)/2
  332.       SEND APos(xpos+1,ypos)||col.3||field.x.y.1||Apos(0,0)
  333.       IF field.x.y.0='#' THEN DO
  334.         flagsset=flagsset-1
  335.         flagsleft=flagsleft+1
  336.       END
  337.       field.x.y.0=field.x.y.1
  338.       SELECT
  339.         WHEN field.x.y.1='*' THEN DO
  340.           BUFFERFLUSH
  341.           SEND APos(xmid-7,ymid-1)'                 '
  342.           SEND APos(xmid-7,ymid)||FLASH||col.1' KABOOOOOOOM!!!! '
  343.           SEND APos(xmid-7,ymid+1)'                 'APos(0,0)
  344.           lose=1
  345.           quit=1
  346.         END
  347.         WHEN field.x.y.1=' ' THEN DO
  348.           x1=x-1
  349.           x2=x
  350.           x3=x+1
  351.           y1=y-1
  352.           y2=y
  353.           y3=y+1
  354.  
  355.           IF y1>0 THEN DO
  356.             IF x1>0 THEN DO
  357.               SEND APos(xpos+1-4,ypos-2)||col.3||field.x1.y1.1
  358.               IF field.x1.y1.0='#' THEN DO
  359.                 flagsset=flagsset-1
  360.                 flagsleft=flagsleft+1
  361.               END
  362.               field.x1.y1.0=field.x1.y1.1
  363.             END
  364.             SEND APos(xpos+1,ypos-2)||col.3||field.x2.y1.1
  365.             IF field.x2.y1.0='#' THEN DO
  366.               flagsset=flagsset-1
  367.               flagsleft=flagsleft+1
  368.             END
  369.             field.x2.y1.0=field.x2.y1.1
  370.             IF x3<xsize+1 THEN DO
  371.               SEND APos(xpos+1+4,ypos-2)||col.3||field.x3.y1.1
  372.               IF field.x3.y1.0='#' THEN DO
  373.                 flagsset=flagsset-1
  374.                 flagsleft=flagsleft+1
  375.               END
  376.               field.x3.y1.0=field.x3.y1.1
  377.             END
  378.           END
  379.  
  380.           IF x1>0 THEN DO
  381.             SEND APos(xpos+1-4,ypos)||col.3||field.x1.y2.1
  382.             IF field.x1.y2.0='#' THEN DO
  383.               flagsset=flagsset-1
  384.               flagsleft=flagsleft+1
  385.             END
  386.             field.x1.y2.0=field.x1.y2.1
  387.           END
  388.           IF x3<xsize+1 THEN DO
  389.             SEND APos(xpos+1+4,ypos)||col.3||field.x3.y2.1
  390.             IF field.x3.y2.0='#' THEN DO
  391.               flagsset=flagsset-1
  392.               flagsleft=flagsleft+1
  393.             END
  394.             field.x3.y2.0=field.x3.y2.1
  395.           END
  396.  
  397.           IF y3<ysize+1 THEN DO
  398.             IF x1>0 THEN DO
  399.               SEND APos(xpos+1-4,ypos+2)||col.3||field.x1.y3.1
  400.               IF field.x1.y3.0='#' THEN DO
  401.                 flagsset=flagsset-1
  402.                 flagsleft=flagsleft+1
  403.               END
  404.               field.x1.y3.0=field.x1.y3.1
  405.             END
  406.             SEND APos(xpos+1,ypos+2)||col.3||field.x2.y3.1
  407.             IF field.x2.y3.0='#' THEN DO
  408.               flagsset=flagsset-1
  409.               flagsleft=flagsleft+1
  410.             END
  411.             field.x2.y3.0=field.x2.y3.1
  412.             IF x3<xsize+1 THEN DO
  413.               SEND APos(xpos+1+4,ypos+2)||col.3||field.x3.y3.1
  414.               IF field.x3.y3.0='#' THEN DO
  415.                 flagsset=flagsset-1
  416.                 flagsleft=flagsleft+1
  417.               END
  418.               field.x3.y3.0=field.x3.y3.1
  419.             END
  420.           END
  421.         END
  422.         OTHERWISE NOP
  423.       END
  424.       SEND APos(65,2)||col.7'Flags left: 'col.2||RIGHT(flagsleft,2)||APos(65,3)||col.7' Flags set: 'col.2||RIGHT(flagsset,2)||APos(0,0)
  425.     END
  426.     IF show=2 & quit=0 THEN DO
  427.       x=((xpos+2)-xbit)/4
  428.       y=((ypos+1)-ybit)/2
  429.       SELECT
  430.         WHEN field.x.y.0='?' & flagsset<nummines THEN DO
  431.           flagsset=flagsset+1
  432.           flagsleft=flagsleft-1
  433.           field.x.y.0='#'
  434.           SEND APos(xpos+1,ypos)||col.1'#'Apos(0,0)
  435.           IF flagsset=nummines THEN CALL CheckDone
  436.         END
  437.         WHEN field.x.y.0='#' THEN DO
  438.           flagsset=flagsset-1
  439.           flagsleft=flagsleft+1
  440.           field.x.y.0='?'
  441.           SEND APos(xpos+1,ypos)||col.7'?'Apos(0,0)
  442.         END
  443.         OTHERWISE NOP
  444.       END
  445.       SEND APos(65,2)||col.7'Flags left: 'col.2||RIGHT(flagsleft,2)||APos(65,3)||col.7' Flags set: 'col.2||RIGHT(flagsset,2)||APos(0,0)
  446.     END
  447.   END
  448.   IF lose=1 THEN DO
  449.     BUFFERFLUSH
  450.     CALL waitkey()
  451.   END
  452.   IF win=1 THEN DO
  453.     EndTime=TIME(S)
  454.     GameTime=EndTime-BeginTime
  455.     IF GameTime<1000 THEN DO
  456.       SEND APos(xmid-11,ymid-2)'                         '
  457.       SEND APos(xmid-11,ymid-1)||col.6' You''ve found all mines! '
  458.       SEND APos(xmid-11,ymid)'     In 'col.7||RIGHT(GameTime,3)||col.6' seconds...    '
  459.       SEND APos(xmid-11,ymid+1)'                         'APos(0,0)
  460.       CALL SortBit
  461.       CALL WriteHiScores
  462.     END
  463.     ELSE DO
  464.       SEND APos(xmid-11,ymid-2)'                         '
  465.       SEND APos(xmid-11,ymid-1)||col.6' You''ve found all mines! '
  466.       SEND APos(xmid-11,ymid)' But it took you too long! '
  467.       SEND APos(xmid-11,ymid+1)'                         'APos(0,0)
  468.     END
  469.     BUFFERFLUSH
  470.     CALL Waitkey()
  471.   END
  472. RETURN
  473.  
  474. CheckDone:
  475.   controle=0
  476.   DO y=1 to ysize
  477.     DO x=1 to xsize
  478.       IF field.x.y.1='*' & field.x.y.0='#' THEN controle=controle+1
  479.     END
  480.   END
  481.   IF nummines=controle THEN DO
  482.     quit=1
  483.     win=1
  484.   END
  485. RETURN
  486.  
  487. APos:
  488. RETURN(ESC'['arg(2)';'arg(1)'H')
  489.  
  490. Instructions:
  491.   CLS
  492.   TR '\c3                ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»'
  493.   TR '                º \c1INSTRUCTIONS for 'LEFT(version,26)' \c3º'
  494.   TR '                ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ'
  495.   TR '\n1\c6This is a ''Mines'' doorgame, and playing is simple:'
  496.   TR 'You will be presented with a \c3'xsize'\c6 by \c3'ysize' \c6grid that contains \c3'nummines'\c6 mines.'
  497.   TR 'Your mission: Clear the minefield by marking the location of all mines...'
  498.   TR '\n1You move the cursor to a field, and press \c3<space>\c6 or \c3<enter>\c6 to clear it.'
  499.   TR 'Hopefully you''ll get either an empty field, or a number.'
  500.   TR 'If the field contains a mine, then it''s tough luck!'
  501.   TR 'A number gives you the number of surrounding mines. An empty field means:'
  502.   TR 'There are no mines in the surrounding 8 fields (So I''ll clear them for you)'
  503.   TR 'You can mark out mines by pressing \c3<0>\c6 or \c3<.>\c6 on a field.'
  504.   TR 'If you marked all mines correctly, then you''ve won!'
  505.   TR 'And if you''re fast enough, you can even make it into the highscore! :-)'
  506.   TR '\n1By the way, cursor movement can be done with the numpad, or the cursor keys.'
  507.   TR '\n1\c2Hit any key to continue!'
  508.   CALL WaitKey()
  509. RETURN
  510.  
  511. ReadHiScores:
  512.   IF EXISTS(DataPath'EMines'xsize||ysize||percent'.hi') THEN DO
  513.     CALL OPEN(file,DataPath'EMines'xsize||ysize||percent'.hi',R)
  514.     a=0
  515.     DO UNTIL EOF(file)
  516.       dummy=READLN(file)
  517.       IF dummy~='' THEN DO
  518.         a=a+1
  519.         list.a=dummy
  520.       END
  521.     END
  522.     CALL CLOSE(file)
  523.   END
  524.   ELSE DO
  525.     DO a=1 TO 10
  526.       list.a=DATE()' - \c6Nobody..............:\c7 999 \c6seconds'
  527.     END
  528.     CALL OPEN(file,DataPath'EMines'xsize||ysize||percent'.hi',W)
  529.     DO a=1 TO 10
  530.       CALL WRITELN(file,list.a)
  531.     END
  532.     CALL CLOSE(file)
  533.   END
  534. RETURN
  535.  
  536. SortBit:
  537.   hit=1
  538.   DO a=10 TO 1 BY -1
  539.     IF GameTime>=WORD(list.a,6) THEN DO
  540.       hit=a+1
  541.       LEAVE
  542.     END
  543.   END
  544.  
  545.   DO b=1 TO hit
  546.     sort.b=list.b
  547.   END
  548.  
  549.   sort.hit=DATE()' - \c6'LEFT(UALias,20,'.')':\c7 'RIGHT(GameTime,3)' \c6seconds'
  550.  
  551.   DO b=hit+1 TO 10
  552.     a=b-1
  553.     sort.b=list.a
  554.   END
  555.  
  556.   DO a=1 TO 10
  557.     list.a=sort.a
  558.   END
  559. RETURN
  560.  
  561. WriteHiScores:
  562.   CALL OPEN(file,DataPath'EMines'xsize||ysize||percent'.hi',W)
  563.   DO a=1 TO 10
  564.     CALL WRITELN(file,list.a)
  565.   END
  566.   CALL CLOSE(file)
  567. RETURN
  568.  
  569. MainCursor:
  570.   dump=''
  571.   BUFFERFLUSH
  572.   key=Waitkey()
  573.   IF key='1B'x THEN DO
  574.     GETCHAR
  575.     key=Waitkey()
  576.     IF key='A' THEN key='8'
  577.     IF key='B' THEN key='2'
  578.   END
  579.   SELECT
  580.     WHEN key='8' THEN DO
  581.       oldplaats=plaats
  582.       plaats=plaats-1
  583.       IF plaats=0 THEN plaats=6
  584.       IF plaats=5 & upje=0 THEN plaats=plaats-1
  585.     END
  586.     WHEN key='2' THEN DO
  587.       oldplaats=plaats
  588.       plaats=plaats+1
  589.       IF plaats=7 THEN plaats=1
  590.       IF plaats=5 & upje=0 THEN plaats=plaats+1
  591.     END
  592.     WHEN key='0d'x | key=' ' THEN DO
  593.       dump=plaats
  594.     END
  595.     WHEN key='Q' THEN DO
  596.       dump=6
  597.     END
  598.     OTHERWISE nop
  599.   END
  600.   SEND cur.oldplaats||cur.oldplaats.0||cur.plaats||cur.plaats.1||Apos(0,21)
  601. RETURN(dump)
  602.  
  603. ShowMain:
  604.   BUFFERFLUSH
  605.   CLS
  606.   TR '\n5\c7            ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»'
  607.   TR '            º \c3 'LEFT(version,26)' \c1(c) 1996 \c2Inorix scripts \c7º'
  608.   TR '            ÈÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍͼ'
  609.   TR '                ³    \c6User : \c2'LEFT(UAlias,20)'              \c7³'
  610.   TR '                ³ \c6Topscore: \c3'RIGHT(list.1,39)' \c7³'
  611.   TR '                ÀÄÄÄÄÄÄÄÄÄÄÒÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÒÄÄÄÄÄÄÄÄÄÄÙ'
  612.   TR '                           º \c3Start E!Mines         \c7º'
  613.   TR '                           º \c3Instructions          \c7º'
  614.   TR '                           º \c3High scores           \c7º'
  615.   TR '                           º \c3Change level: \c7'LEFT(Level.diff.0,6)'  º'
  616.   IF ULevel>=EditLevel THEN DO
  617.     TR '                           º \c3Set fieldsize \c7('RIGHT(xsize,2)'*'RIGHT(ysize,2)') \c7º'
  618.   END
  619.   TR '                           º \c3Quit                  \c7º'
  620.   TR '                        ÉÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍ»'
  621.   TR '                        º \c1Cyborg BBS +31-(0)33-4804065\c7º'
  622.   TR '                        ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ'
  623.   SEND cur.plaats||cur.plaats.1||Apos(0,21)
  624. RETURN
  625.  
  626. SetSize:
  627.   CALL SizeShow
  628.   quit=0
  629.   DO WHILE quit=0
  630.     key=Waitkey()
  631.     IF key='1B'x THEN DO
  632.       GETCHAR
  633.       key=Waitkey()
  634.       IF key='A' THEN key='8'
  635.       IF key='B' THEN key='2'
  636.       IF key='C' THEN key='6'
  637.       IF key='D' THEN key='4'
  638.     END
  639.     oxsize=xsize
  640.     oysize=ysize
  641.     niets=0
  642.     SELECT
  643.       WHEN key='2' & ysize<14 THEN ysize=ysize+1
  644.       WHEN key='4' & xsize>6 THEN xsize=xsize-1
  645.       WHEN key='6' & xsize<15 THEN xsize=xsize+1
  646.       WHEN key='8' & ysize>4 THEN ysize=ysize-1
  647.       WHEN key='Q' | key=' ' | key='0d'x THEN quit=1
  648.       OTHERWISE niets=1
  649.     END
  650.     IF niets=0 & quit=0 THEN DO
  651.       CALL SizeShow
  652.     END
  653.   END
  654.   CALL OPEN(dump,Datapath'E!Mines.field',W)
  655.   CALL WRITELN(dump,'E!Mines size file')
  656.   CALL WRITELN(dump,xsize)
  657.   CALL WRITELN(dump,ysize)
  658.   CALL CLOSE(dump)
  659.  
  660.   xbit=xmid-(TRUNC(xsize/2,0)*4)
  661.   ybit=ymid-(TRUNC(ysize/2,0)*2)
  662.  
  663.   nummines=TRUNC((((xsize*ysize)*percent)/100),0)
  664.  
  665.   top=2+ybit
  666.   bot=(ysize*2)+ybit
  667.   left=3+xbit
  668.   right=((xsize*4)-1)+xbit
  669. RETURN
  670.  
  671. Sizeshow:
  672.   CLS
  673.   DO fruty=1 TO ysize
  674.     SEND Apos(5,5+fruty)||col.3'+'COPIES('-+',xsize)
  675.   END
  676.   SEND Apos(5,3)||col.7'Field x-size is now: 'col.6||RIGHT(xsize,2)||Apos(5,4)||col.7'Field y-size is now: 'col.6||RIGHT(ysize,2)||Apos(1,1)
  677. RETURN
  678.